package hook

import (
	"jtdevice/api/device/model"
	"jtdevice/pkg/snowflake"
	"jtdevice/util"
)

type mqMsgOnline struct {
	Tag           string `json:"-"`
	DeviceNo      string `json:"deviceNo"`   // 设备号
	DeviceTime    string `json:"deviceTime"` // 设备时间
	Online        bool   `json:"online"`
	RemoteAddress string `json:"remoteAddress"` // 设备网络地址
	Session       string `json:"session"`       // 链路会话号
	LinkType      int    `json:"linkType"`      // 链路类型
	UpTraffic     int64  `json:"upTraffic"`     // 上行流量
	DownTraffic   int64  `json:"downTraffic"`   // 下行流量
	NetType       int    `json:"netType"`       // 网络类型
	Version       string `json:"version"`       // 版本信息
	DevType       string `json:"devType"`       // 设备类型
}

// 转换
func (o *mqMsgOnline) devModelOnline() *model.Online {
	r := &model.Online{
		GUID:          o.Session,
		DeviceNo:      o.DeviceNo,
		RemoteAddress: o.RemoteAddress,
		NetType:       o.NetType,
		LinkType:      o.LinkType,
		UpTraffic:     o.UpTraffic,
		DownTraffic:   o.DownTraffic,
		Version:       o.Version,
		DevType:       o.DevType,
	}
	if o.Online {
		r.OnlineTime = o.DeviceTime
	} else {
		r.OfflineTime = o.DeviceTime
	}
	return r
}

type mqMsgStatus struct {
	Tag      string         `json:"-"`
	DeviceNo string         `json:"deviceNo"`
	DTU      string         `json:"dtu"`     // DTU
	Flag     uint8          `json:"flag"`    // 0-实时 1-补传 2-报警开始Gps 3-报警结束Gps
	Acc      uint8          `json:"acc"`     // acc
	Location model.Location `json:"loc"`     // 位置信息
	Tempers  []float32      `json:"temps"`   // 温度
	Mileage  model.Mileage  `json:"mile"`    // 里程
	Oils     []float32      `json:"oils"`    // 油耗
	Module   model.Module   `json:"mod"`     // 模块状态
	Mobile   model.Mobile   `json:"mobile"`  // 移动网络
	Payload  interface{}    `json:"payload"` // 自定义扩展数据
}

func (s *mqMsgStatus) devModelStatus() *model.Status {
	r := &model.Status{}
	r.GUID = snowflake.NextID()
	r.DeviceNo = s.DeviceNo
	r.DTU = s.DTU
	r.Flag = s.Flag
	r.Status.Acc = s.Acc
	r.Status.Location = s.Location
	r.Status.Tempers = s.Tempers
	r.Status.Mileage = s.Mileage
	r.Status.Oils = s.Oils
	r.Status.Module = s.Module
	r.Status.Mobile = s.Mobile
	return r
}

type mqMsgAlarm struct {
	Tag       string      `json:"-"`
	DeviceNo  string      `json:"deviceNo"`
	DTU       string      `json:"dtu"`
	UUID      string      `json:"uuid"`
	Type      int         `json:"type"`
	SubType   int         `json:"subType"`
	StartTime string      `json:"startTime"`
	EndTime   string      `json:"endTime"`
	Data      interface{} `json:"data"`
	Status    interface{} `json:"status"`
}

func (o *mqMsgAlarm) devModelAlarm() *model.Alarm {
	r := &model.Alarm{}
	r.GUID = o.UUID
	r.DTU = o.DTU
	r.AlrType = o.Type*500 + o.SubType // TODO主类型大于500
	r.St = o.StartTime
	r.Et = o.EndTime
	r.Data = util.JString(o.Data)
	r.Flag = 0
	r.DeviceNo = o.DeviceNo
	if r.DTU > r.St {
		r.Flag = 1
		if o.EndTime == "" {
			r.Flag = 2
		}
	}
	return r
}
